from typing import List


def maxArea(height: List[int]) -> int:
    """
    暴力解法：1、两次循环遍历，算出所有的面积；
            2、每次算出的面积与最大值max作比较，留下较大的；
            3、返回最后一个max即可。
    验证结果：超出时间限制！！！
    :param height:
    :return: 
    """
    max_num = 0
    for i in range(len(height) - 1):
        for j in range(i + 1, len(height)):
            area = (j - i) * min(height[i], height[j])
            max_num = max(max_num, area)

    return max_num


def max_area(height: List[int]) -> int:
    """
    面积公式: area = (right - left) * min(height[left], height[right])
    双指针解法：1、设置两个指针，left(头), right(尾)；
              2、计算left与right之间的面积，与当前最大值max作比较，更新max值；
              3、比较left与right两根柱子的高低，谁矮谁往中间走直至重合；
              4、返回最后的max值即可。
    原理：随着往中间收敛，容器的宽肯定越来越小，那么如果选择高柱子收敛，则面积肯定越来越小，所以一定是谁矮谁收敛！！！
    结果： pass
    :param height:
    :return:
    """
    max_num, left, right = 0, 0, len(height) - 1
    while left < right:
        area = (right - left) * min(height[left], height[right])
        max_num = max(max_num, area)
        if height[left] <= height[right]:
            left += 1
        else:
            right -= 1
    return max_num
